package com.atguigu.gmall.product.service.impl;


import com.atguigu.gmall.model.product.BaseAttrInfo;
import com.atguigu.gmall.product.mapper.BaseAttrInfoMapper;
import com.atguigu.gmall.product.service.BaseAttrInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * 平台属性接口实现类
 */
@Service
public class BaseAttrInfoServiceImpl implements BaseAttrInfoService {
    @Resource
    BaseAttrInfoMapper baseAttrInfoMapper;

    /**
     * 查询所有数据
     * @return
     */
    @Override
    public List<BaseAttrInfo> findAll() {
        return baseAttrInfoMapper.selectList(null);
    }

    /**
     * 根据主键查询
     * @param id
     * @return
     */
    @Override
    public BaseAttrInfo getBaseAttrInfo(Long id) {
        return baseAttrInfoMapper.selectById(id);
    }

    /**
     * 添加数据
     * @param baseAttrInfo
     */
    @Override
    public void add(BaseAttrInfo baseAttrInfo) {
        if (baseAttrInfo == null||baseAttrInfo.getAttrName()==null){
            throw new RuntimeException("参数异常");
        }
        int insert = baseAttrInfoMapper.insert(baseAttrInfo);
        if (insert<=0){
            throw new RuntimeException("新增失败");
        }
    }

    /**
     * 修改数据
     * @param baseAttrInfo
     */
    @Override
    public void update(BaseAttrInfo baseAttrInfo) {
        if (baseAttrInfo == null){
            throw new RuntimeException("参数异常");
        }
        int update = baseAttrInfoMapper.updateById(baseAttrInfo);
        if (update < 0){
            throw new RuntimeException("修改失败");
        }
    }

    /**
     * 删除数据
     * @param id
     */
    @Override
    public void delete(Long id) {
        if (id == null){
            return;
        }
        int delete = baseAttrInfoMapper.deleteById(id);
        if (delete <= 0){
            throw new RuntimeException("删除失败");
        }
    }

    /**
     * 分页
     * @param page
     * @return
     */
    @Override
    public IPage search(Integer page, Integer size) {
        return baseAttrInfoMapper.selectPage(new Page<>(page,size),null);
    }

    /**
     * 根据条件进行查询
     * @param baseAttrInfo
     * @return
     */
    @Override
    public List<BaseAttrInfo> search(BaseAttrInfo baseAttrInfo) {
        //构造查询条件
        LambdaQueryWrapper<BaseAttrInfo> wrapper = buildWrapper(baseAttrInfo);
        return baseAttrInfoMapper.selectList(wrapper);
    }

    /**
     * 根据条件进行分页查询
     *  @param page
     * @param size
     * @param baseAttrInfo
     * @return
     */
    @Override
    public IPage search(Integer page, Integer size, BaseAttrInfo baseAttrInfo) {
        //构造查询条件
        LambdaQueryWrapper<BaseAttrInfo> wrapper = buildWrapper(baseAttrInfo);
        return baseAttrInfoMapper.selectPage(new Page<>(page,size),wrapper);
    }


    /**
     * 构造查询条件
     * @param baseAttrInfo
     * @return
     */
    private LambdaQueryWrapper<BaseAttrInfo> buildWrapper(BaseAttrInfo baseAttrInfo){
        LambdaQueryWrapper<BaseAttrInfo> wrapper = new LambdaQueryWrapper<>();
        //ID不为空设置为查询条件
        if (baseAttrInfo.getId() !=null){
            wrapper.eq(BaseAttrInfo::getId,baseAttrInfo.getId());
        }
        //属性名称不为空设置为查询条件
        if (!StringUtils.isEmpty(baseAttrInfo.getAttrName())) {
            wrapper.eq(BaseAttrInfo::getAttrName, baseAttrInfo.getAttrName());
        }
        //分类ID如果不为空设置为查询条件
        if (baseAttrInfo.getCategoryId()!=null){
            wrapper.eq(BaseAttrInfo::getCategoryId,baseAttrInfo.getCategoryId());
        }
        return wrapper;
    }
}
